package pincipal.pack;

import java.util.ArrayList;
import java.util.Iterator;
import partidas.Partida;
import database.Consulta;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.database.Cursor;
import android.os.AsyncTask;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

public class AgregarPartida extends Activity {

	private EditText nombrePartida;
	private EditText observacion;
	private ListView listaMateriales;
	private Button aceptar;
	private Button cancelar;
	private Button volverMenuPrincipal;
	private Button volverAtras;
	private Button seleccionarMateriales;
	private Bundle bundle;
	private ArrayList<String> seleccionados = new ArrayList<String>();
	private ArrayList<String> rendimientos;
	private ArrayList<String> rendimientosOriginales;
	private ProgressDialog pd;
	private boolean toast = false;

	
	@Override
	public void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		requestWindowFeature( Window.FEATURE_NO_TITLE );
		setContentView(R.layout.nuevapartida);
		
		getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
		bundle = getIntent().getExtras();
		
		seleccionados = (ArrayList<String>) bundle.getSerializable("LISTA");
		rendimientosOriginales =  (ArrayList<String>) bundle.getSerializable("LISTARENDIMIENTOS");
		
		String nombrePrevio = bundle.getString("NOMBREORIGINAL");
		String observacionPrevia = bundle.getString("OBSERVACION");

		this.nombrePartida = (EditText)findViewById(R.id.nombrePartida);
		this.observacion = (EditText)findViewById(R.id.observaciones);
		this.aceptar = (Button)findViewById(R.id.botonFinalizar);
		this.cancelar = (Button)findViewById(R.id.botonCancelar);
		this.seleccionarMateriales = (Button)findViewById(R.id.seleccionarMateriales);
		this.listaMateriales = (ListView)findViewById(R.id.listaMateriales);
		
		this.volverAtras = (Button)findViewById(R.id.volverAtras);
		this.volverAtras.setBackgroundResource(R.drawable.back);
		this.volverMenuPrincipal = (Button)findViewById(R.id.menuPrincipal);
		this.volverMenuPrincipal.setBackgroundResource(R.drawable.home);
		
		if(nombrePrevio.length()>0)
		{
			nombrePartida.setText(nombrePrevio);			
		}
		
		if(observacionPrevia.length()>0)
		{			
			observacion.setText(observacionPrevia);
		}
		
		ArrayAdapter<String> adaptadorSimple;
		AdaptadorMaterialesPartida adaptador = new AdaptadorMaterialesPartida(this);
	    adaptadorSimple = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, seleccionados);   
		listaMateriales.setAdapter(adaptador);
		llenarRendimientos();
	    
	    this.aceptar.setOnClickListener(new OnClickListener() 
		{	
			public void onClick(View arg0) 
			{
				String partida = nombrePartida.getText().toString().trim();	
				if(partida.length() > 0)
				{
					if(!existePartida(partida))
					{
						if(!seleccionados.isEmpty())
						{
							if(!rendimientos.isEmpty() )
					          {
								if(faltanRendimientos() == false)
								{
									if(rendimientosCero() == false)
									{
										
										int codigo = 0;
										String tipo = "partida";
										Cursor consultId = Consulta.consultIdentificador(AgregarPartida.this, "'"+tipo+"'");
										if (consultId.moveToFirst())
								        {
								        	do {
								    			codigo = consultId.getInt(1);		        		
								           } while(consultId.moveToNext());    	
								        } 
										Consulta.editIdentificador(AgregarPartida.this, codigo+1, "partida");
										
										
										Consulta.insertPartida(AgregarPartida.this, codigo, partida.trim() ,observacion.getText().toString().trim());			
										int contador = 0;
										
										Iterator iteradorSeleccionados = seleccionados.listIterator();
											while( iteradorSeleccionados.hasNext() ) 
											{									
											          String material = (String)iteradorSeleccionados.next(); 	
												      Consulta.insertMaterialPartida(AgregarPartida.this, partida.trim(), material, rendimientos.get(contador));
												      contador ++;
										     }
																			
											toast = true;			
											llamarDialog("Guardando Partida");
											
									}
									else
									{
										Toast.makeText(AgregarPartida.this, "Rendimientos deben ser mayores que 0", Toast.LENGTH_SHORT).show();			
									}
									
								}
								else
								{
									Toast.makeText(AgregarPartida.this, "Ingrese rendimientos", Toast.LENGTH_SHORT).show();
								}
									   
					          }
							else
					          {
					        	  Toast.makeText(AgregarPartida.this, "Debe ingresar Rendimientos", Toast.LENGTH_SHORT).show();
					          }
						}	
						else 
						{
							Toast.makeText(AgregarPartida.this, "Debe seleccionar Materiales", Toast.LENGTH_SHORT).show();	
						}
					}
					else
					{
						Toast.makeText(AgregarPartida.this, "Nombre de Partida ya existe" , Toast.LENGTH_SHORT).show();
					}
				}
				else 
				{
					Toast.makeText(AgregarPartida.this, "Debe ingresar Nombre de Partida", Toast.LENGTH_SHORT).show();			
				}
			}
		});
		
		this.cancelar.setOnClickListener(new OnClickListener() 
		{	
			public void onClick(View arg0) 
			{
				toast = false;
				llamarDialog("Cargando");
			
			}
		});
		
		this.seleccionarMateriales.setOnClickListener(new OnClickListener() 
		{	
			public void onClick(View arg0) 
			{			
				Bundle bund = new Bundle();
				bund.putString("NOMBREORIGINAL",nombrePartida.getText().toString());
				bund.putString("OBSERVACION", observacion.getText().toString());
				bund.putStringArrayList("SELECCIONADOS", seleccionados);
				bund.putStringArrayList("LISTARENDIMIENTOS", rendimientos);
				bund.putString("VOLVER", "AgregarPartida");
				Intent intent = new Intent(AgregarPartida.this, SeleccionarMaterial.class);
				intent.putExtras(bund);
				startActivity(intent);					
			}
		});
		
		this.volverMenuPrincipal.setOnClickListener( new OnClickListener()
        {
        	public void onClick(View v)
        	{
        		Intent intent = new Intent(AgregarPartida.this, CubicMagic.class);
        		startActivity(intent);
        	}
        	
        });
		
		this.volverAtras.setOnClickListener( new OnClickListener()
        {
        	public void onClick(View v)
        	{
        		toast = false;
        		llamarDialog("Cargando");
        		
        	}
        	
        });
	}
	
	private boolean existePartida(String nombre)
	{
		Cursor consulta = Consulta.consultNombrePartida(AgregarPartida.this, "'"+nombre+"'");
		if(consulta.getCount() > 0)
		{
			return true;
		}
		else
		{
			return false;
		}
	}
	
	private void actualizar()
	{
		Cursor fila =(Cursor)Consulta.consultPartidas(AgregarPartida.this);
		String[] lista = new String[]{};
		lista = new String[fila.getCount()];
		ArrayList<Partida> array = new ArrayList<Partida>();
		int i = 0;
		Partida partida;
		if (fila.moveToFirst())
        {
        	do {
        		lista[i] = fila.getString(1);
        		String nombrePartida = fila.getString(1);
        		partida = new Partida(fila.getInt(0), nombrePartida , fila.getString(2));     		
        		array.add(array.size(), partida );
                i++;
                Cursor materiales =(Cursor)Consulta.consultMaterialesPartida(AgregarPartida.this, nombrePartida);                
                if (materiales.moveToFirst())
                {
                	do {
                		String material = materiales.getString(1);
                		String rendimiento = materiales.getString(2);
                		partida.setMaterial(material, rendimiento);       
                   } while(materiales.moveToNext());    	
                }    
           } while(fila.moveToNext());    	
        } 	
		Bundle bundleMaterial = new Bundle();
		bundleMaterial.putStringArray("LISTA", lista);
		bundleMaterial.putString("TIPO", "partida");
		Intent intent = new Intent(AgregarPartida.this, Buscar.class);
		intent.putExtra("ARRAY",array);
		intent.putExtras(bundleMaterial);       		
		startActivity(intent);
	    	
	}
	
	private boolean faltanRendimientos()
	{
		boolean retorno = false;	
		Iterator iterador = rendimientos.listIterator();
			while( iterador.hasNext() ) 
			{		
				String rend = (String) iterador.next();
				if(rend.equals("--") || rend.equals("") )
		        {
			          retorno = true;						          	          							         
		        }			
		    }
		return retorno;
	}
	
	private boolean rendimientosCero()
	{
		boolean retorno = false;	
		Iterator iterador = rendimientos.listIterator();
			while( iterador.hasNext() ) 
			{		
				String rend = (String) iterador.next();
				double d = Double.parseDouble(rend);
				if(d <= 0)
		        {
			          retorno = true;						          	          							         
		        }			
		    }
		return retorno;
	}
	
	private void llenarRendimientos()
    {	
		rendimientos = new ArrayList<String>();
    	int indice = seleccionados.size();
    	for(int i = 0; i< indice; i++)
    	{
    		if(!rendimientosOriginales.isEmpty())
    		{
	    		if(rendimientosOriginales.get(i) != "")
	    		{
	    		  rendimientos.add(i, rendimientosOriginales.get(i));
	    		}
	    		else
	    		{
	    			rendimientos.add(i, "--");
	    		}
    		}
    		else
    		{
    			rendimientos.add(i, "--");
    		}
       	}
    }

	class AdaptadorMaterialesPartida extends ArrayAdapter {

		Activity context;		
		@SuppressWarnings("unchecked")
		public AdaptadorMaterialesPartida(Activity context) 
		{
			super(context, R.layout.list_item, seleccionados);
			this.context = context;
			
		}
			
	public View getView(int position, View convertView, ViewGroup parent) {
			LayoutInflater inflater = context.getLayoutInflater();
			final int posicion = position;
						
			View item = inflater.inflate(R.layout.item_material_partida, null);			
			TextView nombre = (TextView)item.findViewById(R.id.nombreMaterial);
			nombre.setText(seleccionados.get(position));
					
			final EditText rendimiento = (EditText)item.findViewById(R.id.rendimientoMaterial);
			rendimiento.setText(rendimientosOriginales.get(posicion));
			
					rendimiento.addTextChangedListener( new TextWatcher()
					{
						public void afterTextChanged(Editable s) {
							rendimientos.set(posicion, String.valueOf(s));
						}
						public void beforeTextChanged(CharSequence s, int start, int count,
								int after) {
						}
						public void onTextChanged(CharSequence s, int start, int before,
								int count) {						
						}	
			});
			
			Button boton = (Button)item.findViewById(R.id.eliminarMaterialPartida);
			boton.setBackgroundResource(android.R.drawable.ic_menu_delete);
			boton.setOnClickListener(new OnClickListener()
			{
				public void onClick(View arg0) {
					seleccionados.remove(posicion);
					rendimientos.remove(posicion);
					rendimientosOriginales = rendimientos;
					llenarRendimientos();
					notifyDataSetChanged();		
					
				}
			});
			return(item);
		}	
	}
	
	private void llamarDialog(String mensaje)
	{
		pd = ProgressDialog.show(this, mensaje, "Por favor espere...", true, false);
		new DownloadTask().execute("Parametros que necesite el DownloadTask");
	}
	
	private class DownloadTask extends AsyncTask<String, Void, Object> {
        protected String doInBackground(String... args) {
            actualizar();
            return "Datos ya procesados (resultado)";
        }

   
        protected void onPostExecute(Object result) {
            if(toast)
          	 {
          		Toast.makeText(AgregarPartida.this, "Partida guardada exitosamente", Toast.LENGTH_SHORT).show();			
   			
          	 }
        	if (AgregarPartida.this.pd != null) {
            	AgregarPartida.this.pd.dismiss();
            }
        }
   }
}
